/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufc.quixada.adrs.comandos.admin;

import br.ufc.quixada.adrs.interfaces.Comando;
import br.ufc.quixada.adrs.model.Prazo;
import br.ufc.quixada.adrs.service.PrazoService;
import br.ufc.quixada.adrs.util.UtilAdrs;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Collections;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Caio
 */
public class CmdVisualizarPrazosAntigos implements Comando {

    public String executa(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession();
        Date ultimoMesExibido = (Date) session.getAttribute("dataMesReferencia");
        String action = request.getParameter("action");
        if (action != null && action.equals("next")) {
            if (UtilAdrs.isCurrentMonth(UtilAdrs.getMesPosterior(ultimoMesExibido)) || UtilAdrs.isCurrentMonth(ultimoMesExibido)) {
                return new CmdListarPrazosAbertos().executa(request, response);
            }
            ultimoMesExibido = UtilAdrs.getMesPosterior(ultimoMesExibido);
            processa(ultimoMesExibido, request, response);
            session.setAttribute("dataMesReferencia", ultimoMesExibido);
            return "/admin/admin_gerenciar_prazo_navegacao.jsp";
        } else if (action != null && action.equals("previous")) {
            ultimoMesExibido = UtilAdrs.getMesAnterior(ultimoMesExibido);
            processa(ultimoMesExibido, request, response);
            session.setAttribute("dataMesReferencia", ultimoMesExibido);
            return "/admin/admin_gerenciar_prazo_navegacao.jsp";
        } else {
            if (UtilAdrs.isCurrentMonth(ultimoMesExibido)) {
                return new CmdListarPrazosAbertos().executa(request, response);
            }
            processa(ultimoMesExibido, request, response);
            session.setAttribute("dataMesReferencia", ultimoMesExibido);
            return "/admin/admin_gerenciar_prazo_navegacao.jsp";
        }
    }

    private void processa(Date ultimoMesExibido, HttpServletRequest request, HttpServletResponse response) {
        PrazoService ps = new PrazoService();
        Date dataAtual = ultimoMesExibido;

        //REMOVE PRAZOS DE OUTROS MESES
        request.getSession().removeAttribute("prazo");
        List<Prazo> prazosExibidosNoMes = ps.getAllPrazos();
        SimpleDateFormat pegaMesEAno = new SimpleDateFormat("MM/yyyy");//pega mes e ano
        for (int i = 0; i < prazosExibidosNoMes.size(); i++) {
            Prazo p = prazosExibidosNoMes.get(i);
            if (!pegaMesEAno.format(dataAtual).equals(pegaMesEAno.format(p.getFim()))
                    && !pegaMesEAno.format(dataAtual).equals(pegaMesEAno.format(p.getInicio()))
                    && (dataAtual.after(p.getFim()) || dataAtual.before(p.getInicio()))) {
                prazosExibidosNoMes.remove(p);
                i--;
            }
        }

        //Ordena por data

        Collections.sort(prazosExibidosNoMes, PrazoService.comparadorPorFim);

        request.getSession().setAttribute("prazosAbertos", prazosExibidosNoMes);
        request.getSession().setAttribute("mesDeReferencia", UtilAdrs.treatToMonthYearString(dataAtual));
    }
}
